export const openLoading = () => {
	uni.showLoading({
		title: '正在加载中...',
		mask: true
	})
}

export const closeLoading = () => {
	uni.hideLoading()
}

export const showSuccessToast = (msg) => {
	uni.showToast({
		title: "成功",
		icon: "none"
		// image: successPic
	});
}

export const showErrorToast = (msg) => {
	uni.showToast({
		title: msg,
		icon: "none"
		// image: errorPic
	});
}

export const showTipModal = (msg) => {
	uni.showModal({
		content: msg,
		showCancel: false,
		confirmText: '我知道了',
		confirmColor: '#109E60'
	});
}

/**
 * 时间格式化
 * @param {string｜number} value 时间
 * @param {string} type 格式
 */
export const formatTime = (value, type = 'Y-M-D h:m:s') => {
	if (!value) return value
	if (typeof value == 'string') {
		if (/-|\//.test(value)) {
			value = value.replace(/-/g, '/')
		} else {
			value = +value
		}
	}
	const date = new Date(value)
	const formatObj = {
		Y: date.getFullYear(),
		M: (date.getMonth() + 1 + '').padStart(2, '0'),
		D: (date.getDate() + '').padStart(2, '0'),
		h: (date.getHours() + '').padStart(2, '0'),
		m: (date.getMinutes() + '').padStart(2, '0'),
		s: (date.getSeconds() + '').padStart(2, '0')
	}
	type = type.replace(/Y|M|D|h|m|s/gi, value => {
		return formatObj[value]
	})
	return type
}

/**
 * 格式化日期
 * @param {Date|String} date 日期或日期字符串
 */
export const formatDate = (date) => {
	let YYYY = null;
	let M = null;
	let MM = null;
	let D = null;
	let DD = null;
	let h = null;
	let hh = null;
	let m = null;
	let mm = null;
	let s = null;
	let ss = null;
	let ms = null;
	let ms2 = null;
	let ms3 = null;
	let ms4 = null;
	let dt = null;
	date = date ? new Date(date.replace(/-/g, "/")) : new Date()

	// 如果 date 是 String 类型
	if (date && isString(date)) {
		// 真机运行时，如果直接用 new Date('YYYY-MM-DD hh:mm:ss') 会报 Invalid Date 错误，所以采用下面的方式创建日期
		let dtArr = date
			.replace(/\//g, '.')
			.replace(/-/g, '.')
			.replace(/:/g, '.')
			.replace(/T/g, ' ')
			.replace(' ', '.')
			.replace('Z', '')
			.split('.');

		let year = 2020;
		let month = 12;
		let day = 18;
		let hour = 0;
		let minute = 0;
		let second = 0;
		let millisecond = 0;
		// 年
		if (dtArr.length > 0 && !isNaN(dtArr[0])) {
			year = parseInt(dtArr[0]);
		}
		// 月
		if (dtArr.length > 1 && !isNaN(dtArr[1])) {
			month = parseInt(dtArr[1]);
		}
		// 日
		if (dtArr.length > 2 && !isNaN(dtArr[2])) {
			day = parseInt(dtArr[2]);
		}
		// 时
		if (dtArr.length > 3 && !isNaN(dtArr[3])) {
			hour = parseInt(dtArr[3]);
		}
		// 分
		if (dtArr.length > 4 && !isNaN(dtArr[4])) {
			minute = parseInt(dtArr[4]);
		}
		// 秒
		if (dtArr.length > 5 && !isNaN(dtArr[5])) {
			second = parseInt(dtArr[5]);
		}
		// 毫秒
		if (dtArr.length > 6 && !isNaN(dtArr[6])) {
			millisecond = parseInt(dtArr[6]);
		}

		date = new Date(year, month - 1, day, hour, minute, second, millisecond);
	}

	// 如果 date 是 Date 类型
	if (date && isDate(date)) {
		YYYY = date.getFullYear();
		M = date.getMonth() + 1;
		MM = M >= 10 ? M : '0' + M;
		D = date.getDate();
		DD = D >= 10 ? D : '0' + D;
		h = date.getHours();
		hh = h >= 10 ? h : '0' + h;
		m = date.getMinutes();
		mm = m >= 10 ? m : '0' + m;
		s = date.getSeconds();
		ss = s >= 10 ? s : '0' + s;
		ms = date.getMilliseconds();
		ms2 = ms;
		ms3 = ms;
		ms4 = ms;
		if (ms < 10) {
			ms2 = '0' + ms;
			ms3 = '00' + ms;
			ms4 = '000' + ms;
		} else if (ms < 100) {
			ms3 = '0' + ms;
			ms4 = '00' + ms;
		} else {
			ms4 = '0' + ms;
		}
	}

	// 返回的数据对象
	let result = {
		YYYY: YYYY,
		MM: MM,
		M: M,
		DD: DD,
		D: D,
		hh: hh,
		h: h,
		mm: mm,
		m: m,
		ss: ss,
		s: s,
		ms: ms,
		ms2: ms2,
		ms3: ms3,
		ms4: ms4,
		dt: date,
		fmt1: `${YYYY}-${MM}-${DD}`,
		fmt2: `${YYYY}年${M}月${D}日`,
		fmt3: `${YYYY}-${M}-${D} ${hh}:${mm}`,
		fmt4: `${h}:${m}:${s}`,
		fmt5: `${MM}-${DD}`,
		fmt6: `${YYYY}-${MM}`,
		fmt7: `${YYYY}年${M}月`,
		fmt8: `${h}:${m}`,
		fmt9: `${M}月${D}日`,
		fmt10: `${YYYY}.${MM}.${DD}`,
		fmt11: `${hh}:${mm}`,
		fmt12: `${hh}:${mm}:${ss}`,
		fmt13: `${YYYY}-${M}-${D} ${hh}:${mm}:${ss}`,
		fmt14: `${YYYY}/${MM}/${DD}`,
		fmt15: `${YYYY}/${MM}/${DD} ${hh}:${mm}:${ss}`,
		fmt16: `${YYYY}${MM}${DD}${hh}${mm}${ss}`,
		notes: 'YYYY（年），MM（月，补0），M（月，不补0），DD（日，补0），D（日，不补0），hh（时，补0），h（时，不补0），mm（分，补0），m（分，不补0），ss（秒，补0），s（秒，不补0），ms（毫秒，不补0），ms2（毫秒，补0到2位），ms3（毫秒，补0到3位），ms4（毫秒，补0到4位），其余的fmt1，fmt2，... 看格式就知道了！'
	};

	/**
	 * 判断数据是否是 String 类型
	 * @param {Any} val 要判断的数据
	 * @returns {Boolean} true：是；false：不是；
	 */
	function isString(val) {
		return Object.prototype.toString.call(val) === '[object String]';
	}

	/**
	 * 精确判断数据是否是 Date 类型
	 * @param {Any} val 要判断的数据
	 * @returns {Boolean} true：是；false：不是；
	 */
	function isDate(val) {
		return Object.prototype.toString.call(val) === '[object Date]';
	}
	return result;
}


// 模糊搜索数组
export const fuzzyQuery = (list, key, val) => {
	if (val) {
		var arr = [];
		for (var i = 0; i < list.length; i++) {
			if (list[i][key].indexOf(val) >= 0) {
				arr.push(list[i]);
			}
		}
		return arr;
	}
}